# ifndef __RoutingGraph_
# define __RoutingGraph_

# include "PtAlgo.h"

struct map_t;

enum BuildRouteMode_t {
	brmShortest = 0,
	brmFastest  = 1,
};

enum Vehicle_t {
	vehPedestrian = 0,
	vehBicycle    = 1,
	vehCar        = 2,
	vehTaxi       = 3,
	vehBus        = 4,
	vehEmergency  = 5,
	vehDelivery   = 6,
	vehTruck      = 7
};

struct BuildRoute_t {
	const map_t * pMap;
	Vehicle_t Vehicle;
	BuildRouteMode_t Mode;
	bool bAvoidTollRoads;
	bool bAvoidUnpavedRoads;
};

class CRoutingGraphBase {
  public:
	virtual ~CRoutingGraphBase () {}

	virtual void BuildRoute (
		const point_t & _ptSource, const point_t & _ptDestination,
		points_t & _route,
		size_t _cProgressFrom, size_t _cProgressTo
	) = 0;
};

CRoutingGraphBase * BuildRoutingGraph (const BuildRoute_t & _in);

# endif // __RoutingGraph_